package com.yueqian.teachercode;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class TestBytesIO {

    public static void main(String[] args) {
        //读入字节文件
        byte[] fileBytes = inputBytesFile("d:/aa.jpg");
        System.out.println(Arrays.toString(fileBytes));
        //将内存的字节数组写入文件
        outputBytesFile("d:/fileDir/jpg/1.jpg", fileBytes);

    }

    /**
     * 将内存的字节数组写入文件
     */
    private static void outputBytesFile(String fileStr, byte[] fileBytes) {
        if (fileStr == null || fileBytes == null || fileBytes.length == 0) {
            System.out.println("ERROR: 指定文件为null或者内容不存在");
        }
        //封装文件
        File afile = new File(fileStr);
        //解析路径
        File dir = afile.getParentFile();
        if (!dir.isDirectory()) {
            dir.mkdirs();
        }
        //定义文件输出流
        FileOutputStream fout = null;
        //文件输出通道（流）关联物理文件
        try {
            //如果afile对应的物理文件不存在，会建立新文件，如果存在，会清理所有内容。
            fout = new FileOutputStream(afile);
            //写入文件
            fout.write(fileBytes);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (fout != null) {
                    fout.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    /**
     * 读入字节文件到内存的字节数组
     */
    private static byte[] inputBytesFile(String fileStr) {
        byte[] result = null;
        //非法过滤
        File file = new File(fileStr);
        if (!file.isFile()) {
            System.out.println("Error：文件不存在！");
            return null;
        }
        //建立文件的输入流
        FileInputStream fin = null;
        try {
            fin = new FileInputStream(file);
            //获取文件内容大小，定义字节数组
            result = new byte[fin.available()];
            //读取文件内容到字节数组
            fin.read(result);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fin != null) {
                    fin.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

}
